Como utilizar la API de instagram para obtener el feed de una cuenta.
Primero tenemos que crear una cuenta de desarrollador de Facebook:
Una vez tenemos la cuenta nos logueamos y entramos en Get started:
Ahora tenemos que configurar la cuenta de desarrollador, vamos siguiendo los pasos que se nos indican:
Indicamos un movil para verificar la cuenta:
Verificamos el correo:
Indicamos que somos "Developers":
A continuación creamos una app desde el menu principal:
Indicamos Other en la primera pantalla:
Seleccionamos None en tipo de App:
Le damos un nombre a la aplicación y hacemos click en Create App:
A continuación nos aparecerá un dashboard con distintas opciones
Primero tenemos que configurar la App para añadir la plataforma web
Hacemos click en App settings > Basic y despues en Add platform:
Indicamos plataforma web:
Nos aparece un input para introducir la URL de nuestra web,pero para hacer la prueba en este caso solo tenemos que poner http://localhost/
Y hacemos click en Save changes
Ahora nos vamos al Dashboard y hacemos click en Set up en la opción de Instagram Basic Display
Esto nos añadirá un nuevo producto en el menu de la izquierda, nos vamos a Instagram Basic Display > Basic Display:
Hacemos click abajo en Create New App:
Se nos pide un nombre, lo dejamos por defecto y hacemos click en Create New App:
Una vez creada la App para Instagram Basic Display, tenemos que indicar las URLs (de redireccion, de desautorización y de borrado de datos), en este caso para hacer la prueba dejaremos todas como https://localhost (las direcciones tienen que ser https).
La URL mas importante es Valid OAuth Redirect URIs, está será la URL a donde se nos redigirá despues de hacer login, está URL tendrá que ser una página donde nosotros vayamos a manejar el código de respuesta que se nos da para poder obtener el access token.
Para hacer la prueba y al estar en modo desarrollo, tenemos que añadir usuarios de testing, para ello nos vamos a App Roles > Roles y hacemos click en Add Instagram Testers:
Indicamos un usuario de Instagram en la ventana que nos aparece:
NOTA: el usuario que utilicemos de instagram tiene que tener contenido subido para poder realizar las pruebas de obtener sus posts
Al añadir un usuario quedará con el estado pending:
Necesitamos hacer login en instagram con el usuario que hemos añadido y aceptar la invitación:
Dentro del perfil hacemos click en More > Settings:
Aqui hacemos click en Apps and websites > Tester invites y aceptamos la invitación:
Una vez tenemos hechas todas las configuraciones ya podemos empezar el flujo para hacer consultas a la API, el flujo es el siguiente:
Para obtener el access token tenemos que entrar en la siguiente URL:
https://api.instagram.com/oauth/authorize?client_id={app-id}&redirect_uri={redirect-uri}&scope=user_profile,user_media&response_type=code
Tenemos que cambiar los campos {app-id} que es el id de nuestra aplicación de instagram
NOTA: No es lo mismo el id de aplicación de instagram que el id de la aplicación general
Y el campo {redirect-uri} que es una de las URLs que hemos configurado en el campo Valid OAuth Redirect URIs en nuestro caso https://localhost/
En nuestro caso la URL queda así:
https://api.instagram.com/oauth/authorize?client_id=265105329776698&redirect_uri=https://localhost/&scope=user_profile,user_media&response_type=code
Al acceder a la URL se nos presenta una pantalla de login de instagram (si ya estamos logueados con una cuenta de instagram en nuestro navegador no aparecerá esta pantalla):
Una vez nos logueamos nos preguntará si queremos dar acceso a la App a nuestro perfil, le damos a allow:
Al darle a allow se nos redigirá a la URL que hemos indicado en el enlace, añadiendo el código de authenticación como parámetro en la URL
En nuestro caso la redireccion es a localhost, y al no tener ningun servidor escuchando peticiones simplemente la redirección da error, pero aún así podemos ver el código de authorización en la URL para poder utilizarlo:
NOTA: el código al final tiene una pequeño fragment #_ que no es parte del código en si.
En un entorno real la URL a la que redirigimos se encargaría de coger el código que se le pasa por parámetro para utilizarlo en las siguientes solicitudes.
Una vez tenemos el código obtenemos el access token de la siguiente manera usando curl:
curl -X POST \
https://api.instagram.com/oauth/access_token \
-F client_id={app-id} \
-F client_secret={app-secret} \
-F grant_type=authorization_code \
-F redirect_uri={redirect-uri} \
-F code={code}
Cambiamos los valores {app-id} {app-secret} {redirect-uri} {code} el valor de {app-secret} lo obtenemos en la misma página que el {app-id}:
La respuesta que nos da incluye el access_token y el user_id que necesitaremos para consultar el feed (el user_id solo se usa en algunas peticiones):
Ahora ya tenemos toda la información para consultar el feed de la cuenta, lo hacemos con la siguiente peticion:
curl -X GET 'https://graph.instagram.com/me/media?fields=caption,media_type,media_url&access_token={access-token}'
Cambiamos {access-token} por el access token que hemos obtenido en el paso anterior
El parámetro fields podemos indicarle los parámetro que queremos que nos devuelva, están documentados en la Documentación de la API
La respuesta que nos da una vez formateada es la siguiente:
En el campo data podemos ver que es un array y que tiene dos elementos que corresponden a los dos posts que hay en la cuenta, e incluye el texto de uno de los posts (el otro no tiene ningun texto asociado) y los links a las imagenes del post, la vista de la cuenta desde el navegador es la siguiente:
El access token que obtenemos con el metodo anterior dura solo 1 hora, si queremos obtener otro token tendremos que volver a iniciar sesión con el usuario.
Para evitar esto podemos intercambiar el token de corta duración por uno de larga duración (dura 60 días por defecto) ademas este token de larga duración permite ser refrescado.
Para obtener el token de larga duración lo hacemos con la siguiente peticion:
curl -X GET "https://graph.instagram.com/access_token?grant_type=ig_exchange_token&client_secret={app-secret}&access_token={access_token}"
Cambiamos {app-secret} y {access_token} por los valores correspondientes, y esto nos devolverá un nuevo token que se usa igual que el token que estabamos usando hasta ahora, solo que tiene una duración mayor
El token de larga duración dura 60 días y a mayores podemos refrescarlo para que siga durando mas haya de esos 60 días, lo hacemos con la siguiente petición:
curl -X GET "https://graph.instagram.com/refresh_access_token?grant_type=ig_refresh_token&access_token={long-lived-access-token}"
Cambiamos {long-lived-access-token} por nuestro token de larga duración y la respuesta será un nuevo token que caducará a los 60 días desde el momento en el que hemos hecho la petición.
Instagram | API